#!/usr/bin/env python3
"""
脚本名称：10_exe.py
面试描述： 什么是 Python 的 pickling 和 unpickling?
考察点: pickling 和 unpickling 是指序列化和反序列化对象的过程。具体来说，pickling 是将一个 Python 对象转换为一个字节流，以便可以将其
存储到文件中或通过网络传输;而 unpickling 是将字节流重新转换回原来的 Python 对象。
生活比喻：
作者：Gavin
创建日期：2025-05-26
版本：1.0
依赖库：无
使用方法： python 10_exe.py
"""
import pickle

# 1. pickling 示例
data = {"name": "Alice", "age": 25, "is_student": True}

# 将对象序列化并写入文件
with open("data.pickle", "wb") as f:
    pickle.dump(data, f)

# 2. unpickling 示例
# 从文件中读取字节流并反序列化为对象
with open("data.pickle", "rb") as f:
    data = pickle.load(f)

print(data)  # 输出：{'name': 'Alice', 'age': 25, 'is_student': True}

"""
pickle模块的替代品
注意：
如果需要更安全的序列化方法，可以考虑使用 json 模块，它只支持基本数据类型的序列化和反序列化，并不执行任何代码。因此，它是
更安全的选择，尽管功能上没有 pickle 强大。
"""
import json

data = {"name": "Alice", "age": 25, "is_student": True}

# 序列化
with open("data.json", "w") as f:
    json.dump(data, f)

# 反序列化
with open("data.json", "r") as f:
    data = json.load(f)

print(data)  # 输出：{'name': 'Alice', 'age': 25, 'is_student': True}
